שגיאה מאוד מעצבנת בזמן שליפה ממסד שנגרמת בגלל טעות בשאילתה. כדי לברר מה השגיאה יש את echo mysql_error();, לא?
משאב (Resource) הוא מצביע, קישור למשהו חיצוני.
תארו לעצמכם מוסך גדול עם עשרות חניות. מפינת הרחוב בחריקה מטורפת יוצאת לה פררי אדומה יפהפיה, עוצרת לה בחניה מספר חמש של המוסך ויוסי, הבעלים של הפררי יוצא וצועק לעבר המוסכניק: מלא לי 10 ליטר שמן במכונית. החניתי אותו בחניה מספר חמש ומראה לכיוונה עם האגודל.
העובד שלנו קיבל מהנהג שני דברים.
א. מספר (כמות ליטרי השמן)
ב. מזהה ייחודי (מצביע) של מיקום המכונית בחניית המוסך.
הוא לא קיבל את המכונית עצמה, אלה קישור למיקום בו נמצאת המכונית.
קישור זה למשהו חיצוני נקרא משאב.
הארגומנט המועבר אינו תקין
לרוב נראה את השגיאה הזו בשורה דוגמאת
while( $a = mysql_fetch_assoc($b) )
הפונקציה היחידה שמקבלת כאן ארגומנט (פאראמטר) היא הפונקציה mysql_fetch_assoc.
php אומר שהפאראמטר הזה לא תקין. נסתכל רגע מאיפה הוא מגיע
הפאראמטר הזה מגיע אלינו מתוצאת הפונקציה mysql_query שכנראה מחזירה לנו משאב לא תקין, או בעצם בפועל היא לא מחזירה משאב כלל, אלה מחזירה false
מתי mysql_query מחזירה משאב לא תקין?
בדוקומנטציה כתוב שבמקרה ויש שגיאה בשאילתת ה-sql הפונקציה תחזיר false במקום משאב. כלומר אם הפונקציה לא החזירה משאב יש לנו שגיאה בשאילתה.
לראות מה השגיאה אפשר באמצעות הפונקציה mysql_error() .
כמו כן רצוי לוודא שהשאילתה החזירה לפחות שורה אחת, כלומר בטבלה יש לפחות שורה אחת שעונה על התנאי של השאילתה.
<?php
$res = mysql_query("BLABLA FROM `table`"); // We have an error here
// $res = false
while($r = mysql_fetch_assoc($res))
// Supplied argument is not a valid .. resource
$res = mysql_query("BLABLA FROM `table`"); // We have an error here
// $res = false
while($r = mysql_fetch_assoc($res))
// Supplied argument is not a valid .. resource
<?php
$res = mysql_query("BLABLA FROM `table`"); // We have an error here
// if res === false or 0 rows returned
if(!$res || mysql_num_rows($res) <1 )
{
echo 'Query returned 0 results';
echo mysql_error();
}
else
{
while($r = mysql_fetch_assoc($res))
}
$res = mysql_query("BLABLA FROM `table`"); // We have an error here
// if res === false or 0 rows returned
if(!$res || mysql_num_rows($res) <1 )
{
echo 'Query returned 0 results';
echo mysql_error();
}
else
{
while($r = mysql_fetch_assoc($res))
}